查看原文
其他

R语言学习笔记:dplyr程序包

2017-08-24 miffery 临床科研与meta分析

安装

install.packages("dplyr")


调用

> library(dplyr)


应用实例数据:飞机航班数据

> install.packages("hflights")> library(hflights)


浏览数据

> View(hflights)


本文试图对该dplyr包的一些基础且常用的功能做简要介绍。主要包括:

  1. 变量筛选函数 select

  2. 记录筛选函数 filter

  3. 排序函数 arrange

  4. 变形(计算)函数 mutate

  5. 汇总函数 summarize

  6. 分组函数 group_by

  7. 多步操作连接符 %>%

  8. 随机抽样函数 sample_n,sample_frac


select 用于选择变量

> select(hflights_df,Year,Month,DayOfWeek) # A tibble: 227,496 x 3 Year Month DayOfWeek * <int> <int> <int> 1 2011 1 6 2 2011 1 7 3 2011 1 1 4 2011 1 2 5 2011 1 3 6 2011 1 4 7 2011 1 5 8 2011 1 6 9 2011 1 7 10 2011 1 1 # ... with 227,486 more rows > select(hflights_df,Year:ArrTime) # A tibble: 227,496 x 6 Year Month DayofMonth DayOfWeek DepTime ArrTime * <int> <int> <int> <int> <int> <int> 1 2011 1 1 6 1400 1500 2 2011 1 2 7 1401 1501 3 2011 1 3 1 1352 1502 4 2011 1 4 2 1403 1513 5 2011 1 5 3 1405 1507 6 2011 1 6 4 1359 1503 7 2011 1 7 5 1359 1509 8 2011 1 8 6 1355 1454 9 2011 1 9 7 1443 1554 10 2011 1 10 1 1443 1553 # ... with 227,486 more rows


除了选择变量,也可以删除指定的变量> select(hflights_df,-Year,-DayOfWeek,-DayofMonth,-TailNum)> select(hflights_df,-(Year:AirTime))



filter筛选记录

选择2011年1月而且起飞时间为1400的所有数据记录> filter(hflights_df,Year==2011,Month==1,DepTime==1400)

等同于,&代表并且的意思

> filter(hflights_df,Year==2011 & Month==1 & DepTime==1400)


'或'的关系用|符号表示。选择起飞时间为1400或者1430的航班,且UniqueCarrier为'AA'> filter(hflights_df,Year==2011 & Month==1 & (DepTime==1400 | DepTime==1430) & UniqueCarrier=="AA")


arrange 按照某列进行排序,默认为升序,可以使用desc()进行降序排列。

> y<-select(hflights_df,Year,DepTime,FlightNum) > arrange(y,DepTime) # A tibble: 227,496 x 3 Year DepTime FlightNum <int> <int> <int> 1 2011 1 1542 2 2011 1 1542 3 2011 1 1542 4 2011 1 1542 5 2011 1 4116 6 2011 1 1563 7 2011 1 1109 8 2011 2 1212 9 2011 2 1563 10 2011 3 1542 # ... with 227,486 more rows > arrange(y,desc(DepTime))  #使用降序 # A tibble: 227,496 x 3 Year DepTime FlightNum <int> <int> <int> 1 2011 2400 2456 2 2011 2359 1542 3 2011 2359 426 4 2011 2359 2450 5 2011 2359 1374 6 2011 2359 2659 7 2011 2359 2800 8 2011 2359 794 9 2011 2359 1126 10 2011 2359 4584 # ... with 227,486 more rows


mutate
对已有列进行数据运算并添加为新列:

mutate(hflights_df,   gain = ArrDelay - DepDelay,   speed = Distance / AirTime * 60)


summarise

对数据框调用其它函数进行汇总操作, 返回一维的结果:
summarise(hflights_df,   delay = mean(DepDelay, na.rm = TRUE))



group_by函数实现对数据进行分组,结合summarize函数,可以对分组数据进行汇总统计。

#按照航空公司分组进行汇总

summarise(group_by(tbl_hflights, UniqueCarrier),          

m = mean(AirTime,na.rm = TRUE),          

sd = sd(AirTime,na.rm = TRUE),          

cnt = n(),          

me = median(AirTime,na.rm = TRUE))


%>%,多步骤连接符

dplyr包里还新引进了一个操作符,%>%, 使用时把数据集名作为开头, 然后依次对此数据进行多步操作。
这种运算符的编写方式使得编程者可以按数据处理时的思路写代码, 一步一步操作不断叠加,在程序上就可以非常清晰的体现数据处理的步骤与背后的逻辑。

> hflights_df%>%     group_by(UniqueCarrier)%>%     summarise(me=mean(AirTime))%>%arrange(me)%>%head(10)


挑选随机样本sample_n, sample_frac
sample_n随机选出指定个数(样本容量)的样本数;sample_frac随机选出指定百分比(占整个数据集总体百分比)的样本数。

加入临床科研讨论群,请加13738062354或者pj1989zzj为好友,注明加群,就会拉你进群了。

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存